package logindbmanager

import (
	"src/protoMsg"
	"src/zeus/iserver"
)

// 查找玩家账户 只根据username
func (this *LoginDBManager) QueryUserAccountWithoutPWD(name string) (result *protoMsg.LoginUserMD, ok bool) {
	queryModel := this.MysqlDB.Where("username=?", name).Find(&result)
	if queryModel.Error != nil {
		return nil, false
	}
	// 找到了的话
	ok = true
	return
}

// 创建新玩家账户
func (this *LoginDBManager) NewUserAccount(name string, pwd string) (result *protoMsg.LoginUserMD, ok bool) {
	result = &protoMsg.LoginUserMD{
		UID:      iserver.GetSrvInst().GenerateID(),
		UserName: name,
		PassWord: pwd,
	}
	queryModel := this.MysqlDB.Create(result)
	if queryModel.Error != nil {
		return nil, false
	}
	// 创建成功
	ok = true
	return
}

// 查找玩家账户
func (this *LoginDBManager) QueryUserAccount(name string, pwd string) (result *protoMsg.LoginUserMD, ok bool) {
	queryModel := this.MysqlDB.Where("username=? and password=?", name, pwd).Find(&result)
	if queryModel.Error != nil {
		return nil, false
	}
	// 找到了的话
	ok = true
	return
}

// // QueryCreateUser 查询或者创建一个玩家uid
// func (this *LoginDBManager) QueryCreateUser(openid string, channelID string) (userMd *protoMsg.UserMD, isNewCreate bool) {

// 	umd := &protoMsg.UserMD{}
// 	umd.OpenID, umd.Channel = openid, channelID
// 	r := dbservice.GetLoginOpenID(openid, channelID)
// 	data := r.GetOpenMD()
// 	if data != nil {
// 		r.ReOpenMDEx()
// 		if err := umd.Unmarshal(data); err != nil {
// 			logger.Warn("[logindbmanager] LoginDBManager QueryCreateUser Unmarshal fail", err)
// 			return umd, false
// 		}
// 	} else {
// 		res := this.MysqlDB.FirstOrCreate(umd, "openid=? and channel=?", openid, channelID)
// 		if res.Error != nil {
// 			logger.Warn("[logindbmanager] LoginDBManager QueryCreateUser error: ", res.Error)
// 		}
// 		//新创建的数据（账号注册）
// 		if res.RowsAffected == 1 {
// 			isNewCreate = true
// 		}
// 		// if err := this.MysqlDB.First(umd, "openid=? and channel=?", openid, channelID).Error; err != nil && err == gorm.ErrRecordNotFound {
// 		// 	result := this.MysqlDB.Create(umd)
// 		// 	if result.Error != nil {
// 		// 		logger.Warn("[logindbmanager] LoginDBManager QueryCreateUser error: ", result.Error.Error())
// 		// 		return 0
// 		// 	}
// 		// 	if result.RowsAffected == 0 {
// 		// 		logger.Warn("[logindbmanager] LoginDBManager QueryCreateUser RowsAffected == 0")
// 		// 		return 0
// 		// 	}
// 		// }

// 		data, _ = umd.Marshal()
// 		r.SetOpenMD(data)
// 	}
// 	logger.Debug(logger.LogKey_LoginFlow, "[logindbmanager] LoginDBManager success uid: ", umd.UserID)
// 	return umd, isNewCreate
// }

// func (this *LoginDBManager) IsUIDExists(uid uint64) bool {
// 	umd := &protoMsg.UserMD{}
// 	if err := this.MysqlDB.First(umd, "uid=?", uid).Error; err != nil && err == gorm.ErrRecordNotFound {
// 		return false
// 	}
// 	return true
// }
// func (this *LoginDBManager) GetOpenIdByUid(uid uint64) string {
// 	umd := &protoMsg.UserMD{}
// 	if err := this.MysqlDB.First(umd, "uid=?", uid).Error; err != nil || err == gorm.ErrRecordNotFound {
// 		return ""
// 	}
// 	return umd.OpenID
// }
// func (this *LoginDBManager) GetUserMdByUid(uid uint64) *protoMsg.UserMD {
// 	umd := &protoMsg.UserMD{}
// 	if err := this.MysqlDB.First(umd, "uid=?", uid).Error; err != nil || err == gorm.ErrRecordNotFound {
// 		return nil
// 	}
// 	return umd
// }

// // PreheatUserData 预热一批玩家数据
// func (this *LoginDBManager) PreheatUserData() {

// 	li := make([]*protoMsg.UserMD, 0)
// 	this.MysqlDB.Order("update_at desc").Limit(100).Find(li)
// 	for _, md := range li {
// 		r := dbservice.GetLoginOpenID(md.OpenID, md.Channel)
// 		if !r.ReOpenMDEx() {
// 			buf, _ := md.Marshal()
// 			r.SetOpenMD(buf)
// 		}
// 	}
// }
